/*
 * URL: http://code.google.com/p/nagatsuki-accounting-lib/
 */
/**
 * $Id: LedgerService.java 115 2009-07-27 08:33:37Z tanaka.akira.2006 $
 */
package com.googlecode.nagatsuki.accountinglib.service;

import com.googlecode.nagatsuki.accountinglib.exception.IllegalDateNoException;
import com.googlecode.nagatsuki.accountinglib.exception.LedgerNotFoundException;
import com.googlecode.nagatsuki.accountinglib.exception.UnbalancedException;
import com.googlecode.nagatsuki.accountinglib.model.journal.Transaction;
import com.googlecode.nagatsuki.accountinglib.model.ledger.GeneralLedger;

/**
 * 勘定元帳サービス
 *
 * @author tanaka.akira.2006
 * @see {@link Service}
 *
 */
public interface LedgerService extends Service {

	/**
	 * 取引を総勘定元帳へ転記します。
	 *
	 * @param generalLedger
	 *            総勘定元帳
	 * @param transaction
	 *            仕訳取引
	 * @throws UnbalancedException
	 * @throws IllegalDateNoException
	 */
	void post(GeneralLedger generalLedger, final Transaction transaction)
			throws UnbalancedException, IllegalDateNoException;

	/**
	 * 指定した取引を仕訳帳に更新します。
	 *
	 * @param generalLedger
	 *            総勘定元帳
	 * @param ledgerName
	 *            勘定元帳名
	 * @param dateNo
	 *            取引番号
	 * @param transaction
	 *            取引
	 * @throws UnbalancedException
	 * @throws IllegalDateNoException
	 * @throws LedgerNotFoundException
	 */
	void update(GeneralLedger generalLedger, final String ledgerName,
			final String dateNo, Transaction transaction)
			throws UnbalancedException, IllegalDateNoException,
			LedgerNotFoundException;

	/**
	 * 指定した取引を仕訳帳から削除します。
	 *
	 * @param generalLedger
	 *            総勘定元帳
	 * @param ledgerName
	 *            勘定元帳名
	 * @param dateNo
	 *            取引番号
	 * @throws IllegalDateNoException
	 * @throws LedgerNotFoundException
	 */
	void delete(GeneralLedger generalLedger, final String ledgerName,
			final String dateNo) throws IllegalDateNoException,
			LedgerNotFoundException;
}
